#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
#include <unistd.h>
#include <string.h>
/*
数组int a[2];          指针int *a;
a数组变量               a指针变量
a不能赋值，a=b          a可以赋值。
&取地址是数组指针        &取地址是二级指针
a表示第零个元素地址      a表示第零个元素地址
a+1表示第一个元素地址    a+1表示第一个元素地址
a[1]表示第一个元素      a[1]表示第一个元素
*(a+1)表示第一个元素    *(a+1)表示第一个元素
*/

int getsum(const int *ptr, int len)
{
    int tmpsum = 0;
    // 调用指针前一般判断一下，减少崩溃（只能判断空，但不能判断指针是否有效！）。
    if (!ptr)
    {
        return tmpsum;
    }
    for (int i = 0; i < len; i++)
    {
        tmpsum += ptr[i];
    }
    return tmpsum;
}
int main(int argc, char **argv)
{
    int tmpbuf[3] = {1, 2, 3};
    int *tmpptr = tmpbuf;
    printf("[%s,%d]sum=%d\n", __FILE__, __LINE__, getsum(tmpbuf, sizeof(tmpbuf) / sizeof(tmpbuf[0])));
    printf("[%s,%d]buf=%p,ptr=%p\n", __FILE__, __LINE__, tmpbuf, tmpptr);
    printf("[%s,%d]buf+1=%p,&buf+1=%p\n", __FILE__, __LINE__, tmpbuf + 1, &tmpbuf + 1);
    printf("[%s,%d]ptr+1=%p,&ptr+1=%p\n", __FILE__, __LINE__, tmpptr + 1, &tmpptr + 1);
    return 1;
}
